﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ABC_SA_BLV;
using ABC_SA_DM;

namespace ABC_SA
{

    /* Autor..: Rubén García Montenegro
     * Fecha..: 06/03/2014
     * Detalle: Capa de Vista. Procesos para el mantenimiento de los datos del Proveedor
     */
    

    public partial class frmMantenimientoProveedor : Form
    {
       
        public frmMantenimientoProveedor()
        {
            InitializeComponent();
        }

        /// <summary>
        /// Crea variales con la información en pantalla
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        
        private void bttAgregar_Click(object sender, EventArgs e)
        {
            // Datos del Usuario
            string usuario = txtUsuario.Text;
            string contrasena = txtContrasena.Text;

            //Datos del Proveedor
            string contacto = txtContacto.Text;
            string telefono = txtTelefono.Text;
            string fax = txtFax.Text;
            string ubicacion = txtUbicacion.Text;
            string categoria = cmbCategoria.SelectedItem.ToString();

            //Llamado a la capa de validación para agregar el cliente
            MantenimientoProveedor mante = new MantenimientoProveedor();
            bool agregado = mante.agregar(usuario, contrasena, contacto, telefono, fax, ubicacion,categoria);
            if (agregado)
            {
                lblRespuesta.Text = "Proveedor agregado correctamente";
                lblIDProveedor.Text = mante.consultarID(usuario).idProveedor.ToString();
            }
            else {
                lblRespuesta.Text = "No se pudo agregar correctamente el Proveedor";
            }

            updateGrid();
            
        }

        // Actualiza con el DataGridView con los datos de lo proveedores almacenados en la Base de Datos
        public void updateGrid() { 
        
            MantenimientoProveedor mante = new MantenimientoProveedor();
            dgvProveedores.DataSource = mante.consultar();
            ordenarColumnas();
        }

        // Ordena las columnas del datagrid
        public void ordenarColumnas() {

            dgvProveedores.Columns["idProveedor"].Visible = false;
            dgvProveedores.Columns["UserName"].DisplayIndex = 0;
            dgvProveedores.Columns["fax"].Visible = false;
            dgvProveedores.Columns["Contrasena"].Visible = false;
            dgvProveedores.Columns["Rol"].Visible = false;            
        
        }

        // Carga DataGrid con los datos del Proveedor en la base de datos
        private void frmMantenimientoProveedor_Load(object sender, EventArgs e)
        {
            updateGrid();
        }

        // Elimina Proveedor de la base de datos
        private void bttEliminar_Click(object sender, EventArgs e)
        {
            if (lblID.Text == string.Empty) // Se tiene que haber cargados los datos del proveedor para ser eliminado
            {
                MessageBox.Show("Debe seleccionar con doble click un dato de la tabla");
            }
            else {
                //Si se seleccionó con doble click el Proveedor a eliminar se procede a su ejecución
                MantenimientoProveedor mante = new MantenimientoProveedor();
                if (mante.eliminar(lblID.Text))
                {

                    MessageBox.Show("Dato eliminado correctamente");
                    limpiarCamposFrmProveedores();

                }
                else {

                    MessageBox.Show("ERROR: Dato eliminado incorrectamente");
                }
            
            }


            updateGrid();
            

        }

        //Selección de un proveedor para ser cargado en los campos para su modificación o eliminación
        private void dgvProveedores_DoubleClick(object sender, EventArgs e)
        {

            int rowindex = dgvProveedores.CurrentCell.RowIndex;
            txtUsuario.Text = dgvProveedores.Rows[rowindex].Cells["UserName"].Value.ToString();
            //lblID.Text = rowindex.ToString();
            lblID.Text = dgvProveedores.Rows[rowindex].Cells["UserName"].Value.ToString();

            Proveedor proveeCon = new Proveedor();
            proveeCon.UserName = lblID.Text;
            try
            {
                MantenimientoProveedor mante = new MantenimientoProveedor();
                Proveedor proveedor = mante.consultarID(lblID.Text);
                txtUsuario.Text = proveedor.UserName;
                txtContrasena.Enabled = false;

                txtContacto.Text = proveedor.contacto;
                txtTelefono.Text = proveedor.telefono;
                txtFax.Text = proveedor.fax;
                txtUbicacion.Text = proveedor.ubicacion;
                lblIDProveedor.Text = proveedor.idProveedor.ToString();
                cmbCategoria.DisplayMember = proveedor.categoria;

            }
            catch (Exception ex){

                MessageBox.Show("ERROR: No se pudo obtener los datos, volver a intentar:" + ex.ToString());
            
            }


        }

        // Actualiza unicamente los datos del proveedor, es decir usuario, contrasena y rol no se actualizan
        private void bttActualizar_Click(object sender, EventArgs e)
        {

            // Datos del Usuario
            string usuario = txtUsuario.Text;

            //Datos del Proveedor
            string contacto = txtContacto.Text;
            string telefono = txtTelefono.Text;
            string fax = txtFax.Text;
            string ubicacion = txtUbicacion.Text;
            string categoria = cmbCategoria.SelectedItem.ToString();


            //Llamado a la capa de validación para agregar el cliente
            MantenimientoProveedor mante = new MantenimientoProveedor();
            bool agregado = mante.actualizar(usuario,  contacto, telefono, fax, ubicacion, categoria);
            if (agregado)
            {
                lblRespuesta.Text = "Proveedor agregado correctamente";
                lblIDProveedor.Text = mante.consultarID(usuario).idProveedor.ToString();
            }
            else
            {
                lblRespuesta.Text = "No se pudo agregar correctamente el Proveedor";
            }

            updateGrid();

            //MantenimientoProveedor mante = new MantenimientoProveedor();
            //Proveedor prove = mante.actualizar(usuario, nombre, apellido, identificacion, telefono, correo, contacto, fax, ubicacion);

            //dgvProveedores.Rows[Int32.Parse(lblID.Text)].Cells[0].Value = prove.usuario;
            //dgvProveedores.Rows[Int32.Parse(lblID.Text)].Cells[1].Value = prove.nombre;
                
        }

        // Limpias los textboxes de 
        private void limpiarCamposFrmProveedores() {
            
            txtUsuario.Text = string.Empty;
            txtContrasena.Text = string.Empty;

            txtContacto.Text = string.Empty;
            txtTelefono.Text = string.Empty;
            txtFax.Text = string.Empty;
            txtUbicacion.Text = string.Empty;
            lblIDProveedor.Text = string.Empty;
            cmbCategoria.SelectedIndex = 0;        
        
        
        }

        private void btnatras_Click(object sender, EventArgs e)
        {
            AdminForm admin = new AdminForm();
            this.Hide();
            admin.Show();
        }
    }
}
